在Xcode的菜单中,Product -> Profile,选择Leaks工具,进行内存泄露排查。
排查的基本步骤是,运行录制,标记Generation A,操作App,标记Generation B,或若干个Generation,然后观察A到B的内存变化,未释放的内存,等。
录制完成后有选项,可以查看不同的内存类型,如下图
第一个是所有的Heap以及Annonymous VM
Heap是对象存放的地方。
Annonymous VM,全称是,Annonymous Virtual Memory,简单来说就是“未命名”的一些内存,貌似多数是一些CF层的东西。
包含CoreImage,CoreData的一些存储,如CGImage应该就是在这里面的。
Instruments: Heap Allocations and Anonymous VM
What does “Anonymous VM” in allocations instruments signify?
所以一般我们用第一个。
标记完成后就能看到Generation A的状态,与Generation B的状态,如下图
可以看出,我在B的状态有很多没有释放掉的CoreImage,展开点进去可以看到具体是哪些CoreImage以及他们的调用栈,然后就可以定位到具体的代码了。
注意上图的内存增长状态,在程序运行中会一直变化,因为可能A与B之间产生的对象,在后来的运行中被释放掉了,这时B的增长就会减少。
Instruments Tutorial with Swift: Getting Started
raywenderlich的这篇文章更详细,还有将检测时间的,懒得翻译了。。